package com.example.tester.service.impl;

import com.example.tester.service.SRTService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;

/**
 * 基于StringRedisTemplate的redisService实现
 * @author lzh
 * @date 2019/9/9 - 16:57
 */
@Service
public class SRTServiceImpl implements SRTService {

    /**
     * RedisTemplate和StringRedisTemplate的区别：
     *
     * 1. 两者的关系是StringRedisTemplate继承RedisTemplate。
     *
     * 2. 两者的数据是不共通的；也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据，RedisTemplate只能管理RedisTemplate中的数据。
     *
     * 3. SDR默认采用的序列化策略有两种，一种是String的序列化策略，一种是JDK的序列化策略。
     *
     * StringRedisTemplate默认采用的是String的序列化策略，保存的key和value都是采用此策略序列化保存的。
     *
     * RedisTemplate默认采用的是JDK的序列化策略，保存的key和value都是采用此策略序列化保存的
     * ————————————————
     * 版权声明：本文为CSDN博主「易樊」的原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接及本声明。
     * 原文链接：https://blog.csdn.net/yifanSJ/article/details/79513179
     */
    @Autowired
    protected StringRedisTemplate stringRedisTemplate;




    @Override
    public Object getObj(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    @Override
    public Object getHash(String hash, String hk) {
        return stringRedisTemplate.opsForHash().get(hash,hk);
    }

    @Override
    public void saveStringType(String key, String str, long expireTime, TimeUnit unit) {
        stringRedisTemplate.opsForValue().set(key,str,expireTime,unit);
    }

    @Override
    public void saveString(String key, String value) {
        stringRedisTemplate.opsForValue().set(key,value);
    }



    @Override
    public void saveHash(String hash, String hk , String hv) {
        stringRedisTemplate.opsForHash().put(hash,hk,hv);
    }


    @Override
    public void saveList(String key, String list) {
        stringRedisTemplate.opsForList().leftPush(key, list);
    }

    @Override
    public void saveZSet(String key, String zSet , Double score) {
        stringRedisTemplate.opsForZSet().add(key,zSet,score);
    }

    @Override
    public void saveSet(String key, String set) {
        stringRedisTemplate.opsForSet().add(key,set);
    }

    @Override
    public void deleteObj(String key) {
        stringRedisTemplate.delete(key);
    }
}
